package com.chensi.service.impl;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.chensi.dao.ICommonDao;
import com.chensi.service.ICommonService;
@Service
public class CommonServiceImpl implements ICommonService{
	@Autowired
	protected ICommonDao commonDao;
	
	/**
	 * 获取当前Session
	 */
	public Session getSession() {
		return commonDao.getSession();
	}

	/**
	 * 根据Id获取实体对象
	 * @param entityClass 实体类型
	 * @param id 实体对象主键
	 * @return commonDao.查询结果对象
	 */
	public <T> T get(Class<T> entityClass, Serializable id) {
		return commonDao.get(entityClass, id);
	}

	/**
	 * 获取实体类的所有数据集合
	 * @param entityClass 实体类型
	 * @return commonDao.所有数据集合
	 */
	public <T> List<T> getAll(Class<T> entityClass) {
		return commonDao.getAll(entityClass);
	}

	/**
	 * 按属性查找对象列表.
	 */
	public <T> List<T> findByProperty(Class<T> entityClass, String propertyName, Object value) {
		return commonDao.findByProperty(entityClass, propertyName, value);
	}

	/**
	 * 通过HQL和参数查询列表
	 * @param hql 查询hql
	 * @return commonDao.params 参数
	 */
	public <T> List<T> findByHql(String hql, Object... params) {
		return commonDao.findByHql(hql, params);
	}

	/**
	 * 通过SQL和参数查询列表
	 * @param sql 查询sql
	 * @return commonDao.查询结果列表
	 */
	public <T> List<T> findBySql(String sql) {
		return commonDao.findBySql(sql);
	}

	/**
	 * 通过SQL和参数查询列表
	 * @param sql 查询sql
	 * @param params 参数
	 * @return commonDao.查询结果列表
	 */
	public <T> List<T> findBySql(String sql, Object[] params) {
		return commonDao.findBySql(sql, params);
	}

	/**
	 * 通过SQL和参数查询列表
	 * @param sql 查询sql
	 * @param entityClass 查询结果实体类型
	 * @return commonDao.查询结果列表
	 */
	public <T> List<T> findBySql(Class<T> entityClass, String sql) {
		return commonDao.findBySql(entityClass, sql);
	}

	/**
	 * 通过SQL和参数查询列表
	 * @param sql 查询sql
	 * @param entityClass 查询结果实体类型
	 * @param params 参数
	 * @return commonDao.查询结果列表
	 */
	public <T> List<T> findBySql(Class<T> entityClass, String sql, Object[] params) {
		return commonDao.findBySql(entityClass, sql, params);
	}

	/**
	 * 保存实体对象
	 * @param entity 实体对象
	 */
	public <T> void save(T entity) {
		commonDao.save(entity);
	}

	/**
	 * 保存实体对象集合
	 * @param entitys 实体对象集合
	 */
	public <T> void saveAll(Collection<T> entitys) {
		commonDao.saveAll(entitys);
	}

	/**
	 * 保存或更新实体对象
	 * @param entity 实体对象
	 */
	public <T> void saveOrUpdate(T entity) {
		commonDao.saveOrUpdate(entity);
	}

	/**
	 * 更新指定的实体
	 */
	public <T> void update(T entity) {
		commonDao.update(entity);
	}

	/**
	 * 更新实体对象集合
	 * @param entitys 实体对象集合
	 */
	public <T> void updateAll(Collection<T> entitys) {
		commonDao.updateAll(entitys);
	}

	/**
	 * 删除实体对象对应的数据库记录
	 * @param entity 实体对象
	 */
	public <T> void delete(T entity) {
		commonDao.delete(entity);
	}

	/**
	 * 根据主键删除实体对象
	 * @param entityClass 实体对象类型
	 * @param id 主键
	 */
	public <T> void deleteById(Class<T> entityClass, Serializable id) {
		commonDao.deleteById(entityClass, id);
	}

	/**
	 * 删除实体对象集合
	 * @param entitys 实体对象集合
	 */
	public <T> void deleteAll(Collection<T> entitys) {
		commonDao.deleteAll(entitys);
	}

	/**
	 * 根据实体类创建查询实体
	 * @param entityClass 实体类型
	 * @return commonDao.查询实体
	 */
	public <T> Criteria createCriteria(Class<T> entityClass) {
		return commonDao.createCriteria(entityClass);
	}

	/**
	 * 创建带查询实体集合的查询实体对象
	 * @param entityClass 实体类型
	 * @param criterions 查询参数集合
	 * @return commonDao.查询实体
	 */
	public <T> Criteria createCriteria(Class<T> entityClass, Criterion... criterions) {
		return commonDao.createCriteria(entityClass, criterions);
	}

	public <T> List<T> find(String hql) {
		return commonDao.find(hql);
	}
}
